Data handling systems, such as computer systems, generally include a host system with several core components, including a central processing unit (CPU), a memory device, IO devices, and a device interconnect or root complex for transferring information between components of the host system. One interconnect protocol is PCIe, which defines modes of data transfer between host system components.
Direct memory access (DMA), direct cache access (DCA), and data direct I/O (DDIO) are existing techniques to transfer data between host systems (memory or caches) and IO devices. DMA transfers data between IO devices and host system memory. DDIO transfers data between IO devices and the last level cache (LLC) of a host CPU. DCA transfers data between IO devices and host system memory just like DMA, but after the data transfer is complete, DCA prefetches the data to the CPU caches from memory.
Host systems often include multiple data handling ports, each of which may be configured to transfer data by one of DMA, DCA or DDIO protocols. Such ports are referred to herein as “multi-ports.” A common system may have some multi-ports configured for DMA, some multi-ports configured for DDIO, and possibly some multi-ports configured for DCA. Existing system software sends an IO request to devices using one of these techniques (DMA, DCA, or DDIO). However, there are currently no methods to combine functional aspects of DMA, DCA, or DDIO protocols, or to dynamically switch between protocols for multiplexing, QoS control, or cache flow-control.